package cn.techwis.service;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.techwis.common.WxApi;
import cn.techwis.dto.PayBillDTO;
import cn.techwis.util.WxHttpUtil;
import cn.techwis.vo.InItVO;
import cn.techwis.vo.PayBillVO;

import java.io.InputStream;

/**
 * 账单相关api
 */
public class PayBillService extends Tservice {

    /**
     * 下载交易账单
     */
    public static void tradebill(PayBillVO payBillVO, InItVO inItVO) {
        validateObject(payBillVO, PayBillVO.PayBill.class, inItVO);
        String format = StrUtil.format(WxApi.billQuery.TRADEBILL, payBillVO.getBill_date(), payBillVO.getBill_type(), payBillVO.getTar_type());
        JSONObject jsonObject = WxHttpUtil.requestGet("申请交易账单", format, inItVO.getPrivateKeyFileName(), inItVO.getMchId(), inItVO.getSerialNo());
        PayBillDTO payBillDTO = billQueryResult(jsonObject);
        downloadBill(payBillDTO.getDownload_url(), inItVO);
    }

    /**
     * 下载资金账单
     */
    public static void flowbill(PayBillVO payBillVO, InItVO inItVO) {
        validateObject(payBillVO, PayBillVO.PayBill.class, inItVO);

        String format = StrUtil.format(WxApi.billQuery.FUNDFLOWBILL, payBillVO.getBill_date(), payBillVO.getAccount_type(), payBillVO.getTar_type());
        JSONObject jsonObject = WxHttpUtil.requestGet("申请资金账单", format, inItVO.getPrivateKeyFileName(), inItVO.getMchId(), inItVO.getSerialNo());
        PayBillDTO payBillDTO = billQueryResult(jsonObject);
        downloadBill(payBillDTO.getDownload_url(), inItVO);
    }

    /**
     * 下载账单
     */
    private static final InputStream downloadBill(String download_url, InItVO inItVO) {
        InputStream inputStream = WxHttpUtil.requestGetDownBill("下单账单", download_url, inItVO.getPrivateKeyFileName(), inItVO.getMchId(), inItVO.getSerialNo());
        return inputStream;
    }


    public static void main(String[] args) {
        PayBillVO payBillVO = new PayBillVO();
        payBillVO.setBill_date("2021-03-02");
        InItVO inItVO = new InItVO();
        inItVO.setPrivateKeyFileName("C:\\Users\\yando\\Desktop\\apiclient_key.pem");
        inItVO.setSerialNo("71B1200AE00607AA44A2EC99DB14387CF266C354");
        inItVO.setMchId("1505026761");
        flowbill(payBillVO, inItVO);


    }


}
